package com.xiaobao.campusLostFoundAfter.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xiaobao.campusLostFoundAfter.mapper.FoundItemMapper;
import com.xiaobao.campusLostFoundAfter.pojo.Comment;
import com.xiaobao.campusLostFoundAfter.pojo.FoundItem;
import com.xiaobao.campusLostFoundAfter.service.FoundItemService;
import org.springframework.stereotype.Service;


import java.util.Date;
import java.util.List;


@Service
public class FoundItemServiceImpl implements FoundItemService {
    private final FoundItemMapper foundItemMapper;

    public FoundItemServiceImpl(FoundItemMapper foundItemMapper) {
        this.foundItemMapper = foundItemMapper;
    }

    /**
     * 根据分页请求获取发现的物品列表
     *
     * @return 返回一个包含发现物品列表的PageResult对象
     */
    @Override
    public PageInfo<FoundItem> getFoundItemByPage(int pageNum, int pageSize,
                                                  Integer categoryId, Integer status,
                                                  String keyword) {
        // 开启分页
        PageHelper.startPage(pageNum, pageSize);

        // 执行查询
        List<FoundItem> foundItems = foundItemMapper.findByPage(categoryId, status, keyword);

        // 封装分页结果
        return new PageInfo<>(foundItems);
    }

    /**
     * 添加发现的物品到数据库中
     * 此方法接收一个FoundItem对象作为参数，表示发现的物品信息
     * 通过调用FoundItemMapper中的addFoundItem方法将物品信息添加到数据库中
     *
     * @param foundItem 发布丢失东西信息，包含需要添加到数据库的物品详情
     * @return 返回添加物品操作的影响行数，通常为1表示成功，其他值表示失败
     */
    @Override
    public int addFoundItem(FoundItem foundItem) {
        return foundItemMapper.addFoundItem(foundItem);
    }

    /**
     * 更新失物招领物品的信息
     * 此方法通过调用FoundItemMapper中的updateFoundItem方法来更新数据库中失物招领物品的详细信息
     * 它主要用于更新界面或后台管理系统中修改失物招领物品信息后，将新的信息保存到数据库
     *
     * @param foundItem 待更新的失物招领物品对象，包含需要更新的物品信息
     * @return 更新操作影响的行数，通常为1，如果返回0表示更新失败或指定的物品不存在
     */
    @Override
    public int updateFoundItem(FoundItem foundItem) {
        return foundItemMapper.updateFoundItem(foundItem);
    }

    /**
     * 根据ID删除找到的物品信息
     * 此方法用于在数据库中删除指定ID的找到的物品记录
     * 主要用于数据清理或撤销错误录入的操作
     *
     * @param id 要删除的找到物品的ID，这是一个唯一的标识符
     * @return 返回删除操作影响的行数，通常为1，如果ID不存在，则可能为0
     */
    @Override
    public int deleteFoundItem(Integer id) {
        return foundItemMapper.deleteFoundItem(id);
    }

    /**
     * 根据id查询招领物品
     */
    @Override
    public FoundItem getFoundItemById(Integer id) {
        return foundItemMapper.getFoundItemById(id);
    }


    @Override
    public List<FoundItem> getFoundItemByUserId(String userId) {
        return foundItemMapper.getFoundItemByUserId(userId);
    }

    // 添加评论
    @Override
    public int addComment(String content, String userId, Integer itemId) {
        String type = "Found";
        //获取当前时间
        Date createTime = new Date();
        return foundItemMapper.addComment(content, userId, itemId, type, createTime);
    }

    // 获取评论
    @Override
    public List<Comment> getComments(Integer itemId) {
        String type = "Found";
        return foundItemMapper.getComments(itemId, type);
    }

    @Override
    public PageInfo<FoundItem> getAllFoundItemsByPage(Integer page, Integer pageSize) {
        PageHelper.startPage(page, pageSize);
        List<FoundItem> foundItems = foundItemMapper.getAllFoundItemsByPage();
        return new PageInfo<>(foundItems);
    }

    @Override
    public int updateStatus(Integer id, int status) {

        return foundItemMapper.updateStatus(id, status);
    }

    @Override
    public PageInfo<FoundItem> getAllRecord(Integer page, Integer pageSize) {
        PageHelper.startPage(page, pageSize);
        List<FoundItem> foundItems = foundItemMapper.getAllRecord();
        return new PageInfo<>(foundItems);
    }
}
